// IProtocol645Manager.aidl
package com.sgcc.pda.hzaidl.impl;


import com.sgcc.pda.hw.IProtocolIECManager;
import com.sgcc.pda.hw.ReturnResult;

import org.json.JSONException;
import org.json.JSONObject;
// Declare any non-default types here with import statements

public class ProtocolIECManager  extends IProtocolIECManager.Stub{

    private static ProtocolIECManager mInstance;


    /**
     * 单例
     *
     * @return
     */
    public static synchronized ProtocolIECManager getInstance() {
        if (mInstance == null) {
            mInstance = new ProtocolIECManager();
        }
        return mInstance;
    }


    /**
     * @param meterAddress 表通讯地址
     * @param itemCode     寄存器
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readIECData(String meterAddress, String itemCode)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
            jb.put("itemCode", itemCode);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readIECData", jb.toString());

    }

    /**
     * 进入命令模式
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult enterProgrammingMode(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_enterProgrammingMode", jb.toString());

    }

    /**
     * 登录命令
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult loginCode(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_loginCode", jb.toString());

    }


    /**
     * 读取命令
     *
     * @param meterAddress 表通讯地址
     * @param itemCode     寄存器
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readData(String meterAddress, String itemCode)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
            jb.put("itemCode", itemCode);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readData", jb.toString());

    }


    /**
     * 读取负荷曲线最早的时间记录
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readEarliestTime(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readEarliestTime", jb.toString());

    }


    /**
     * 读取比例因子
     *
     * @param meterAddress 表通讯地址
     * @param itemCode     寄存器地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public  ReturnResult readScaleFactor(String meterAddress, String itemCode)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
            jb.put("itemCode", itemCode);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readScaleFactor", jb.toString());

    }

    /**
     * 读取负荷曲线记录时间间隔
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readInterval(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readInterval", jb.toString());

    }


    /**
     * FI读取负荷曲线记录
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readLoadWithFI(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readLoadWithFI", jb.toString());

    }


    /**
     * FR读取负荷曲线记录
     *
     * @param meterAddress 表通讯地址
     * @param earlistNum   要读取的最早的一条记录的记录号
     * @param dataNums     要读取的条数
     * @param offset       偏移量
     * @param totalLength  每条记录拟要读取的量的总字节数
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readLoadWithFR(String meterAddress, String earlistNum, String dataNums, String offset, String totalLength)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
            jb.put("earlistNum", earlistNum);
            jb.put("dataNums", dataNums);
            jb.put("offset", offset);
            jb.put("totalLength", totalLength);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readLoadWithFR", jb.toString());

    }


    /**
     * 退出电表
     *
     * @param meterAddress 表通讯地址
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult exitMeter(String meterAddress)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_exitMeter", jb.toString());

    }

    /**
     * 退出电表
     *
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:linkUserData      返回-表号
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public void stopSeial()   {
        HardWareUtil.requestHardwareData("iec_stopSeial");
    }


    /**
     * 读取曲线
     *
     * @param meterAddress 表通讯地址
     * @param startTime    曲线开始时间
     * @param endTime      曲线结束时间
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:
     * 0:数据
     * :List<String> datas(code==其他): size==1
     * 0:错误描述
     */
    public ReturnResult readCurveData(String meterAddress, String startTime, String endTime)   {
        JSONObject jb = new JSONObject();
        try {
            jb.put("meterAddress", meterAddress);
            jb.put("startTime", startTime);
            jb.put("endTime", endTime);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return HardWareUtil.requestHardwareData("iec_readCurveData", jb.toString());

    }
}
